/**
 *  CMS系统工具类
 *  调用方式：cmsUtils.方法名
 */
var cmsUtils = {
    /**
     * 获取左侧菜单栏menuid
     * @param htmlName
     */
    getMenuId : function(htmlName){
        var result = 'error';
        if (!htmlName) {
            return result;
        }
        var $li = $('#modules').children('li');
        for(var i = 0; i < $li.length; i++) {
            var catalog = login_user_infos.user_permissions[$li.eq(i).find('a').attr('module-index')];
            if (catalog) {
                layui.each(catalog.children, function (catalog_index, catalog_item) {
                    layui.each(catalog_item.children, function (menu_index, menu_item) {
                        if (menu_item.url && menu_item.url.toString().indexOf(htmlName) != -1) {
                            result =  'menu'+menu_item.id;
                        }
                    });
                });
            }
        }
        return result;
    },
    /**
     *  鉴定用户是否有该权限
     *  ============================================================================================
     *  入参：
     *      permission_value【权限值】
     *  ============================================================================================
     */
    authentication: function (permission_value) {
        return cmsUtils.recursion(login_user_infos.user_permissions, permission_value);
    },
    /**
     *  在内容主体区域添加动态tab页
     *  ============================================================================================
     *  入参：
     *      tab_id          【全局唯一主键】
     *      tab_title       【tab标签名称】
     *      url             【静态资源请求地址】
     *      custom_obj      【自定义对象】
     *  ============================================================================================
     */
    addContentTab: function (tab_id, tab_title, url, custom_obj) {
        var lay_id = 'tab-'+tab_id;
        var titElem = $('li[lay-id="'+lay_id+'"]');
        var contElem = $('div[lay-id="'+lay_id+'"]');
        if (titElem[0] && contElem[0]) {
            titElem.click();
            return;
        }
        $.get(url, function (result) {
            layui.element.tabAdd('login-user-tabs', {
                id: lay_id,
                title: tab_title,
                content: result
            });
            if (custom_obj) {
                $('li[lay-id="'+lay_id+'"]')[0]['tabCustomObj'] = custom_obj;
            }
            layui.element.tabChange('login-user-tabs', lay_id);
            // 增加Tab页点击监听事件
            var titElem = $('li[lay-id="'+lay_id+'"]');
            titElem.bind('tabClick');
            titElem.click(function (event) {
                if (event.target.className != 'layui-icon layui-unselect layui-tab-close') {
                    layui.element.tabChange('login-user-tabs', event.currentTarget.getAttribute('lay-id'));
                    titElem.trigger('tabClick');
                }
            });
            // 构建Tab页拖拽
            Sortable.create(document.getElementById('tabTitles'), {
                onStart: function (event) {
                    layui.element.tabChange('login-user-tabs', event.item.getAttribute('lay-id'));
                },
                onEnd: function (event) {
                    if (event.newIndex != event.oldIndex) {
                        var tabContentsChildren = $('#tabContents')[0].children;
                        if (event.newIndex == 0) {
                            $(tabContentsChildren[event.newIndex]).before(tabContentsChildren[event.oldIndex]);
                        } else {
                            if (event.newIndex > event.oldIndex) {
                                $(tabContentsChildren[event.newIndex]).after(tabContentsChildren[event.oldIndex]);
                            } else {
                                $(tabContentsChildren[event.newIndex-1]).after(tabContentsChildren[event.oldIndex]);
                            }
                        }
                    }
                    layui.element.tabChange('login-user-tabs', event.item.getAttribute('lay-id'));
                }
            });
        });
    },
    /**
     *  在内容主体区域添加动态tab页（iframe模式）
     *  ============================================================================================
     *  入参：
     *      tab_id          【全局唯一主键】
     *      tab_title       【tab标签名称】
     *      url             【静态资源请求地址】
     *  ============================================================================================
     */
    addContentIframeTab: function (tab_id, tab_title, url) {
        var lay_id = 'tab-'+tab_id;
        layui.element.tabAdd('login-user-tabs', {
            id: lay_id,
            title: tab_title,
            content: '<div><iframe src="'+url+'" width="100%" height="780px"></iframe></div>'
        });
        layui.element.tabChange('login-user-tabs', lay_id);
    },
    /**
     *  form数据绑定通用方法
     *  ============================================================================================
     *  入参：
     *      form_id         【form元素ID】
     *      data            【表单JSON数据，例如{id:'id',name:'name'}】
     *  ============================================================================================
     */
    formDataBind: function (form_id, data) {
        if (!data) {
            return;
        }
        var formElem = $('#'+form_id);
        var fieldElem = formElem.find('input,select,textarea');
        var need_render = false;
        $.each(fieldElem, function(index, item){
            if (!item.name) {
                return;
            }
            if (item.tagName == 'SELECT') {
                need_render = true;
                $(item).find('option').each(function (option_index, option_item) {
                    if ($(option_item).val() == data[item.name]) {
                        $(option_item)[0].selected = true;
                    }
                });
            } else {
                if (/^checkbox|radio$/.test(item.type)) {
                    if (item.value == String(data[item.name])) {
                        need_render = true;
                        $(item)[0].checked = true;
                    }
                } else {
                    if (data[item.name] || !isNaN(data[item.name])) {
                        $(item).val(data[item.name]);
                    }
                }
            }
        });
        if (need_render) {
            layui.form.render(null, formElem.attr('lay-filter'));
        }
    },
    /**
     *  渲染静态的下拉选择框（只适用于单独拉取下拉框里的数据）
     *  ============================================================================================
     *  入参：
     *      data            【一个类似[{id:"id", name:"name"}]的数据】
     *      elem_id         【下拉选择框元素的ID】
     *      value_col       【值字段】
     *      name_col        【名称字段】
     *  ============================================================================================
     */
    renderStaticSelectionBox: function(data, elem_id, value_col, name_col) {
        $.each(data, function (index, item) {
            var name = item[name_col];
            $('#'+elem_id).append('<option value="'+item[value_col]+'">'+name+'</option>');
        });
        layui.form.render('select');
    },
    /**
     *  渲染动态的下拉选择框（只适用于单独拉取下拉框里的数据）
     *  ============================================================================================
     *  入参：
     *      url             【Ajax请求地址】
     *      elem_id         【下拉选择框元素的ID】
     *      value_col       【值字段】
     *      name_col        【名称字段】
     *      name_col1       【名称字段1，预留两个名称字段，必要时可以无限增加】
     *      optData         【要给select自定义的data】
     *  ============================================================================================
     */
    renderDynamicSelectionBox: function (url, elem_id, value_col, name_col, name_col1, optData) {
        $.ajax({
            type: 'get',
            url: url,
            async: false,
            dataType: 'json',
            success: function (data) {
                if (data.data) {
                    $.each(data.data, function (index, item) {
                        var name = item[name_col];
                        if (name_col1) {
                            name += ' '+item[name_col1];
                        }
                        var opt = '';
                        if (optData) {
                            var fieldNames = Object.keys(optData);
                            $.each(fieldNames, function(fieldIndex, fieldItem){
                                opt += 'data-' + optData[fieldItem] + '="'+ item[fieldItem]+'" ';
                            })
                        }
                        $('#'+elem_id).append('<option value="' + item[value_col] + '" ' + opt + '>' + name + '</option>');
                    });
                    layui.form.render('select');
                }
            }
        });
    },
    /**
     *  渲染下拉选择框（只适用于单独拉取下拉框里的数据）
     *  ============================================================================================
     *  入参：
     *      elem_id         【下拉选择框元素的ID】
     *      arr             【对象】
     *      arr.labelValue        字段名称
     *      arr.label         值
     *  ============================================================================================
     */
    renderSelectionBox:function (elem_id, arr) {
        $.each(arr, function (index, item) {
            $('#'+elem_id).append(
                '<option value="'+item.label+'">'+item.labelValue+'</option>'
            );
        });
        layui.form.render('select');
    },
    /**
     *  日期加上天数得到新的日期
     *  ============================================================================================
     *  入参：
     *      date            【new Date()实例】
     *      days            【增加的天数】
     *  ============================================================================================
     */
    getEndDate: function (date, days) {
        var end_date = new Date(date.getTime()+(days*24*60*60*1000));
        return end_date;
    },
    /**
     *  日期往前减去天数得到新的日期
     *  ============================================================================================
     *  入参：
     *      date            【new Date()实例】
     *      days            【往前减的天数】
     *  ============================================================================================
     */
    getLatelyDate: function (date, days) {
        var end_date = new Date(date.getTime()-(days*24*60*60*1000));
        return end_date;
    },
    /**
     *  获取时间是周几
     *  ============================================================================================
     *  入参：
     *      date            【new Date()实例】
     *  ============================================================================================
     */
    dateSendFormat: function (data){
        var timeValue = '';
        var weekDay = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
        var hours = data.getHours();
        var minutes = data.getMinutes();
        timeValue += (weekDay[data.getDay()]);
        timeValue += "("+cmsUtils.dateFormat(data,"yyyy.MM.dd")+")";
        timeValue += "" +((hours >= 12) ? "下午 " : "上午 " );
        timeValue += ((hours >12) ? hours -12 :hours);
        timeValue += ((minutes < 10) ? ":0" : ":") + minutes
        return timeValue;
    },
    /**
     *  获取时间与当前时间差是几天
     *  ============================================================================================
     *  入参：
     *      date            【new Date()实例】
     *  ============================================================================================
     */
    daysOverdue: function (data){
        var sdate = new Date(data);
        var now = new Date();
        var days = now.getTime() - sdate.getTime();
        var day = parseInt(days / (1000 * 60 * 60 * 24));
        return day;
    },
    /**
     *  格式化时间
     *  ============================================================================================
     *  入参：
     *      date            【new Date()实例】
     *      format          【格式，例如“yyyy-MM-dd HH:mm:ss”，支持任何间隔符】
     *  ============================================================================================
     */
    dateFormat: function (date, format) {
        var o = {
            'M+': date.getMonth()+1,//month
            'd+': date.getDate(),//day
            'H+': date.getHours(),//hour
            'm+': date.getMinutes(),//minute
            's+': date.getSeconds(),//second
            'q+': Math.floor((date.getMonth()+3)/3),//quarter
            'S': date.getMilliseconds()//millisecond
        }
        if (/(y+)/.test(format)) {
            format = format.replace(RegExp.$1, (date.getFullYear()+'').substr(4-RegExp.$1.length));
        }
        for (var k in o) {
            if (new RegExp('('+k+')').test(format)) {
                format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ('00'+o[k]).substr((''+o[k]).length));
            }
        }
        return format;
    },
    /**
     *  设置动态tab页内容主体的高度
     *  ============================================================================================
     *  入参：
     *      el_id           【需要设置高度值的元素ID】
     *      height          【预留的高度，例如表单保存按钮的高度，让按钮不进入滚动条计算范围】
     *  ============================================================================================
     */
    setContentTabHeight: function (el_id, height) {
        var content_height = $(window.document).height()-$('#tabTitles').height()-$('.layui-header').height()-$('.layui-footer').height()-20;
        if (height > 0) {
            content_height = content_height-height;
        }
        $('#'+el_id).attr('style', 'overflow-x: hidden;overflow-y: auto');
        $('#'+el_id).height(content_height);
    },
    /**
     *  递归鉴定用户是否有该权限
     *  ============================================================================================
     *  入参：
     *      array                   【递归数组】
     *      permission_value        【权限值】
     *  ============================================================================================
     */
    recursion: function (array, permission_value) {
        var bool = false;
        $.each(array, function (index, item) {
            if (item.value == permission_value) {
                bool = true;
                return;
            }
            if (item.children.length > 0) {
                var child_bool = cmsUtils.recursion(item.children, permission_value);
                if (child_bool) {
                    bool = child_bool;
                    return;
                }
            }
        });
        return bool;
    },
    /**
     *  根据订单状态码获取显示文案
     *  ============================================================================================
     *  入参：
     *      orderStatusCode         【订单状态码】
     *  ============================================================================================
     */
    getOrderStatusName: function (orderStatusCode) {
        if (!orderStatusCode) {
            return '';
        }
        var orderStatusName = null;
        $.each(cmsUtils.getAllOrderStatus(), function (index, item) {
            if (orderStatusCode == item.orderStatusCode) {
                orderStatusName = item.orderStatusName;
                return;
            }
        });
        return orderStatusName;
    },
    /**
     *  获取所有订单状态
     */
    getAllOrderStatus: function () {
        var allOrderStatusArray = [
            // 正常流程状态
            {orderStatusCode: 'CREATED',orderStatusName: '审核中'},
            {orderStatusCode: 'PRE_AUDITED',orderStatusName: '待回电'},
            {orderStatusCode: 'AUDITED',orderStatusName: '待支付'},
            {orderStatusCode: 'PAID',orderStatusName: '待交车'},
            {orderStatusCode: 'CAR_RECEIVED',orderStatusName: '待确认'},
            {orderStatusCode: 'CONFIRM_CAR_RECEIVED',orderStatusName: '已交车'},
            // 退款流程状态
            {orderStatusCode: 'FAIL_DELIVERED_AUDITED',orderStatusName: '退款中'},
            {orderStatusCode: 'REFUNDED',orderStatusName: '已退款'},
            // 异常流程状态
            {orderStatusCode: 'FAIL_USER_PRE_AUDITED',orderStatusName: '预审已拒绝'},
            {orderStatusCode: 'FAIL_USER_AUDITED',orderStatusName: '电审已拒绝'},
            {orderStatusCode: 'CLOSED_DEALER',orderStatusName: '已取消'},
            {orderStatusCode: 'CLOSED_USER_PAID_OVERTIME',orderStatusName: '已关闭'}
        ]
        return allOrderStatusArray;
    },
    /**
     *  根据合约车订单状态码获取显示文案
     *  ============================================================================================
     *  入参：
     *      orderStatusCode         【订单状态码】
     *  ============================================================================================
     */
    getOrderTreatyStatusName: function (orderStatusCode) {
        if (!orderStatusCode) {
            return '';
        }
        var orderStatusNameObj = new Array();
        $.each(cmsUtils.getAllOrderTreatyStatus(), function (index, item) {
            if (orderStatusCode == item.orderStatusCode) {
                orderStatusNameObj.list = item.orderStatusListName;
                orderStatusNameObj.detail = item.orderStatusDetailName;
                return;
            }
        });
        return orderStatusNameObj;
    },
    /**
     *  获取所有合约车订单状态
     */
    getAllOrderTreatyStatus: function () {
        var allOrderStatusArray = [
            // 正常流程状态
            {orderStatusCode: 'CREATED',orderStatusListName: '审核中',orderStatusDetailName: '客户资料预审中'},
            {orderStatusCode: 'PRE_AUDITED',orderStatusListName: '待电审',orderStatusDetailName: '客户待平台电审'},
            {orderStatusCode: 'VISITING',orderStatusListName: '待家访',orderStatusDetailName: '客户待平台家访'},
            {orderStatusCode: 'AUDITED',orderStatusListName: '待面签',orderStatusDetailName: '客户待平台面签'},
            {orderStatusCode: 'SIGNED',orderStatusListName: '待支付',orderStatusDetailName: '待客户支付首付'},
            {orderStatusCode: 'PAYING',orderStatusListName: '支付中',orderStatusDetailName: '银行支付处理中'},
            {orderStatusCode: 'PAID',orderStatusListName: '待交车',orderStatusDetailName: '待平台准备车辆'},
            {orderStatusCode: 'CAR_RECEIVED',orderStatusListName: '待提车',orderStatusDetailName: '待客户提车确认'},
            {orderStatusCode: 'CONFIRM_CAR_RECEIVED',orderStatusListName: '已完成',orderStatusDetailName: '客户完成确认提车'},
            // 异常流程状态
            {orderStatusCode: 'FAIL_USER_PRE_AUDITED',orderStatusListName: '预审已拒绝',orderStatusDetailName: '系统审核拒绝'},
            {orderStatusCode: 'FAIL_USER_AUDITED',orderStatusListName: '电审已拒绝',orderStatusDetailName: '平台电审拒绝'},
            {orderStatusCode: 'FAIL_USER_VISITING',orderStatusListName: '家访已拒绝',orderStatusDetailName: '平台家访拒绝'},
            {orderStatusCode: 'REJECT_USER_AUDITED',orderStatusListName: '已驳回',orderStatusDetailName: '平台电审驳回'},
            {orderStatusCode: 'CLOSED_DEALER',orderStatusListName: '已取消',orderStatusDetailName: '门店取消订单'},
            {orderStatusCode: 'CLOSED_USER_PAID_OVERTIME',orderStatusListName: '已关闭',orderStatusDetailName: '支付超时关闭'}
        ]
        return allOrderStatusArray;
    },
    /**
     *  获取所有车辆颜色
     */
    getAllCarColor: function () {
        var allCarColor = [
            {color: '黑色'},
            {color: '红色'},
            {color: '深灰色'},
            {color: '粉红色'},
            {color: '银灰色'},
            {color: '紫色'},
            {color: '白色'},
            {color: '蓝色'},
            {color: '香槟色'},
            {color: '绿色'},
            {color: '黄色'},
            {color: '咖啡色'},
            {color: '橙色'},
            {color: '多彩色'},
            {color: '其他'}
        ]
        return allCarColor;
    },
    /**
     *  根据订单类型码获取显示文案
     *  ============================================================================================
     *  入参：
     *      orderTypeCode         【订单类型码】
     *  ============================================================================================
     */
    getOrderTypeName: function (orderTypeCode) {
        if (!orderTypeCode) {
            return '';
        }
        var orderTypeName = null;
        $.each(cmsUtils.getAllOrderType(), function (index, item) {
            if (orderTypeCode == item.orderTypeCode) {
                orderTypeName = item.orderTypeName;
                return;
            }
        });
        return orderTypeName;
    },
    /**
     *  获取所有订单类型
     */
    getAllOrderType: function () {
        var allOrderTypeArray = [
            {orderTypeCode: 'USER',orderTypeName: '集采车'},
            {orderTypeCode: 'DEALER',orderTypeName: '自有车'},
            {orderTypeCode: 'TREATY',orderTypeName: '合约车'}
        ]
        return allOrderTypeArray;
    },
    /**
     *  根据保证金财务打款状态码获取显示文案
     *  ============================================================================================
     *  入参：
     *      depositRefundStatus         【保证金财务打款状态码】
     *  ============================================================================================
     */
    getDepositRefundStatusName: function (depositRefundStatus) {
        switch (depositRefundStatus) {
            case 0:
                return '待审核';
                break;
            case 1:
                return '已通过';
                break;
            case 2:
                return '已驳回';
                break;
            default:
                return '<span style="color: red">未申请</span>';
                break;
        }
    },
    /**
     *  根据销售岗位职级码获取显示文案
     *  ============================================================================================
     *  入参：
     *      sellerLevelCode         【销售岗位职级码】
     *  ============================================================================================
     */
    getSellerLevelName: function (sellerLevelCode) {
        if (!sellerLevelCode) {
            return '';
        }
        var sellerLevelName = null;
        $.each(cmsUtils.getAllSellerLevel(), function (index, item) {
            if (sellerLevelCode == item.sellerLevelCode) {
                sellerLevelName = item.sellerLevelName;
                return;
            }
        });
        return sellerLevelName;
    },
    /**
     *  获取所有销售岗位职级
     */
    getAllSellerLevel: function () {
        var allSellerLevelArray = [
            {sellerLevelCode: 'SELLER',sellerLevelName: '业务经理'},
            {sellerLevelCode: 'LEADER',sellerLevelName: '团队经理'},
            {sellerLevelCode: 'DIRECTOR',sellerLevelName: '总监'}
        ]
        return allSellerLevelArray;
    },
    /**
     *  分页数
     */
    getLimits: function () {
        return [20,50,100];
    },
    getLimit: function () {
        return 20;
    }
}